﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace iNet.Media.Imaging
{
	/// <summary>
	/// 基於 TIFF 格式的影像解碼工作工廠。
	/// </summary>
	public abstract class TiffBasedImageDecodeTaskFactory : FastImageDecodeTaskFactory
	{
		#region 建構子
		/// <summary>
		/// 初始化新的 TiffBasedImageDecodeTaskFactory 執行個體。
		/// </summary>
		/// <param name="name">工廠名稱，可以為 Null (Visual Basic 為 Nothing)。</param>
		/// <param name="decodingFormat">媒體的解碼格式。</param>
		/// <exception cref="ArgumentNullException">decodingFormat 為 Null (Visual Basic 為 Nothing)。</exception>
		public TiffBasedImageDecodeTaskFactory(string name, IMediaFormat decodingFormat)
			: base(name, decodingFormat)
		{ }
		#endregion
		#region IsSupportedFormatCore
		/// <summary>
		/// 確認指定的媒體標頭是否符合支援的媒體格式。
		/// </summary>
		/// <param name="mediaHeader">媒體標頭。</param>
		/// <returns>True 表示媒體標頭符合支援的媒體格式，False 表示不符合。</returns>
		protected override bool IsSupportedFormatCore(byte[] mediaHeader)
		{
			if (mediaHeader.Length < 4)
				return false;
			if (mediaHeader[0] == 'I' && mediaHeader[1] == 'I' && mediaHeader[2] == 0x2A && mediaHeader[3] == 0)
				return true;
			if (mediaHeader[0] == 'M' && mediaHeader[1] == 'M' && mediaHeader[2] == 0 && mediaHeader[3] == 0x2A)
				return true;
			return false;
		}
		#endregion
		#region MediaHeaderSize
		/// <summary>
		/// 取得媒體標頭的位元組大小。
		/// </summary>
		public override int MediaHeaderSize
		{
			get
			{
				return 4;
			}
		}
		#endregion
	}
}
